package com.gpnu7_412.yanzhi.mapper;

import com.gpnu7_412.yanzhi.dto.DynamicDisplayDto;
import com.gpnu7_412.yanzhi.entity.Dynamic;

import java.sql.Timestamp;
import java.util.List;

/**
 * @author ZZH
 * @author HJJ
 */
public interface DynamicMapper {
    /**
     * 新增动态
     * @param dynamic 动态信息
     * @return 影响条数
     */
    Integer insertDynamic(Dynamic dynamic);

    /**
     * 根据用户ID删除动态
     * @param userId 用户ID
     * @return 影响条数
     */
    Integer deleteDynamicByUserId(Integer userId);
    /**
     * 根据动态ID删除动态
     * @param dynamicId 动态ID
     * @return 影响条数
     */
    Integer deleteDynamic(Integer dynamicId);

    /**
     * 修改动态
     * @param dynamic 动态信息
     * @return 影响条数
     */
    Integer updateDynamic(Dynamic dynamic);
    /**
     * 动态点赞
     * @param dynamicId 动态ID
     * @return 影响条数
     */
    Integer likeDynamic(Integer dynamicId);

    /**
     * 根据动态ID查找动态
     * @param dynamicId 动态ID
     * @return 动态对象
     */
    Dynamic getDynamicById(Integer dynamicId);
    /**
     * 获取所有动态展示信息
     * @return 动态展示DTO
     */
    List<DynamicDisplayDto> getAllDynamic();
    /**
     * 获取指定用户的动态展示信息
     * @param userIds 用户ID列表
     * @return 动态展示DTO
     */
    List<DynamicDisplayDto> getAllAttention(List<Integer> userIds);
    /**
     * 根据标题模糊查找动态
     * @param title 标题
     * @return 动态展示DTO
     */
    List<DynamicDisplayDto> getDynamicByTitle(String title);
    /**
     * 根据用户ID查找其动态
     * @param userId 用户ID
     * @return 动态列表
     */
    List<Dynamic> getDynamicByUserId(Integer userId);
    /**
     * 根据时间范围查找动态
     * @param beginTime 开始时间
     * @param endTime 结束时间
     * @return 动态列表
     */
    List<Dynamic> getDynamicByTime(Timestamp beginTime, Timestamp endTime);

    /**
     * 多条件查找动态
     * @param dynamicId 动态ID
     * @param userId 用户ID
     * @param title 动态标题
     * @return 动态展示DTO
     */
    List<DynamicDisplayDto> selectDynamicByCondition(Integer dynamicId, Integer userId, String title);
}